package com.stack.knowyoudao.dao;

import com.stack.knowyoubean.bean.HomeWork;
import org.apache.ibatis.annotations.*;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 作业表持久层
 * 设计到基本类型无法适应动态sql所有这里采用包装类型
 * 开启二级缓存
 *
 * @author stack
 */
@Repository("homeWorkDao")
@Scope("singleton")
@CacheNamespace
public interface HomeWorkDao {


    /**
     * 查询指定作业的信息
     *
     * @param hid 作业号
     * @return 作业实体
     */
    @Select("select * from homework where hid=#{hid}")
    HomeWork findHomeWorkById(@Param("hid") Integer hid);


    /**
     * 返回该课程持有课程集合
     *
     * @param sid 课程号
     * @return 课程集合
     */
    @Select("select hid from homework where sid=#{sid}")
    List<Integer> findHomeWorkBySid(@Param("sid") Integer sid);

    /**
     * 查询作业表总量（动态sql）手动剔除考试
     *
     * @param sid     课程号
     * @param hkid    作业分类号
     * @param hstatus 作业状态
     * @param hname   作业名
     * @return 课程信息
     */
    @Select("<script>" +
            "select count(*) from homework where sid = #{sid} " +
            "<if test=\" hkid==null or hkid ==0 \"> and hkid !=4 </if> " +
            "<if test=\" hkid!=null and hkid != '' \"> and hkid=#{hkid} </if> " +
            "<if test=\" hstatus!=null and hstatus != '' \"> and hstatus=#{hstatus} </if>" +
            "<if test=\" hname!=null and hname != '' \"> and hname like  #{hname} </if>" +
            "</script>")
    Integer findHomeWorkCount(@Param("sid") Integer sid, @Param("hkid") Integer hkid, @Param("hstatus") Integer hstatus, @Param("hname") String hname);


    /**
     * 查询作业表信息（动态sql）
     *
     * @param sid     课程号
     * @param hkid    作业分类号
     * @param page    页号
     * @param limit   查询数量
     * @param hstatus 作业状态
     * @param hname   作业名
     * @return 课程信息
     */
    @Select("<script>" +
            "select hid,hname,hkid,hstatus,htime from homework where sid = #{sid} " +
            "<if test=\" hkid==null or hkid ==0 \"> and hkid !=4 </if> " +
            "<if test=\" hkid!=null and hkid != '' \"> and hkid=#{hkid} </if> " +
            "<if test=\" hstatus!=null and hstatus != '' \"> and hstatus=#{hstatus} </if>" +
            "<if test=\" hname!=null and hname != '' \"> and hname like  #{hname} </if>" +
            "limit #{page},#{limit}" +
            "</script>")
    List<HomeWork> findHomeWork(@Param("sid") Integer sid, @Param("hkid") Integer hkid, @Param("hstatus") Integer hstatus, @Param("hname") String hname, @Param("page") Integer page, @Param("limit") Integer limit);

    /**
     * 更新作业信息
     *
     * @param homeWork 作业实体
     * @return 更新标志
     */
    @Update("update homework set hname=#{hname},hstatus=#{hstatus},hcontent=#{hcontent},hanswer=#{hanswer},htime=#{htime},hkid=#{hkid} where hid=#{hid}")
    int updateHomeWork(HomeWork homeWork);

    /**
     * 添加作业
     *
     * @param homeWork 作业实体
     * @return 插入是否成功
     */
    @Insert("insert into homework(hname,hstatus,hcontent,hanswer,htime,hkid,sid) values(#{hname},#{hstatus},#{hcontent},#{hanswer},#{htime},#{hkid},#{sid}) ")
    int insertHomeWork(HomeWork homeWork);

    /**
     * 更新作业的状态
     *
     * @param hid     作业号
     * @param hstatus 状态编号
     * @return 更新标记
     */
    @Update("update homework set hstatus=#{hstatus} where hid=#{hid} ")
    int updateHomeWorkStatus(@Param("hid") Integer hid, @Param("hstatus") Integer hstatus);


    /**
     * 删除作业
     *
     * @param hid 作业编号
     * @return 删除标记
     */
    @Delete("delete from homework where hid=#{hid}")
    int deleteHomeWork(@Param("hid") Integer hid);


}
